'''
     4月新增：配置文件内容的读取
'''

import configparser  # 解析配置文件
import os

# 1）获取配置文件conf.ini路径
curpath = os.path.dirname(os.path.realpath(__file__))
file = os.path.join(curpath, "conf.ini")
# 2）创建ConfigParser 对象，用于读取和解析配置文件
conf = configparser.ConfigParser()
conf.read(file, encoding='UTF-8')


# 用于获取请求地址
def get_url(option=None):
    """
        获取请求地址url
        Returns:请求地址
    """
    env_mapping = {
        'yqw_test': 'yqw_test',
        'app_test': 'app_test',
        'test': 'test',
        'yqw_m_test': 'yqw_m_test',
        'app_dev': 'app_dev'
    }
    # 判断传递的option是否在列表内
    if option not in env_mapping and option is not None:
        raise ValueError(f"参数错误，未存在环境参数: {option}. 可选值: {list(env_mapping.keys())},请到read_conf文件检查")
    # 默认值处理
    env_key = env_mapping.get(option, 'test')
    # option: test：后端地址；devs：测服；prod：正服
    url = read_conf('envs', env_key)
    return url


# 用于测试报告url展示
def get_all_envs_url():
    """
    获取配置文件所有环境进行拼接展示（用于报告）
    Returns:拼接url展示（https://sandbox-api.yiqiwen.cn/;https://sandbox-app-api.yiqiwen.cn/）
    """
    urls = []
    for option in conf.options('envs'):
        url = conf.get('envs', option)
        if url:
            urls.append(url)

    return ";".join(urls) if urls else None


# 用于请求头配置
def get_headers(env, key=None):
    """
           获取对应环境的默认请求头
           :param env: 环境标识
           :param key: 账号标识（角色：用户账号/老师账号）
           :return: 请求头字典
    """
    headers = {}
    # 公共请求头
    headers['Content-Type'] = read_conf('headers', 'Content-Type') # app
    if key == 'app_teacher_header':
         # 获取配置项[app_teacher_header]老师端
        teacher_headers = read_conf('app_teacher_header')
        headers.update(teacher_headers)
        headers['YQW-Token'] = read_conf('headers', 'teacher_Authorization')
    elif key == 'app_user_header':
        # 获取配置项[app_user_header]用户端
        user_headers = read_conf('app_user_header')
        headers.update(user_headers)
        headers['YQW-Token'] = read_conf('headers', 'Authorization')
    else:
        # 小程序
        headers['Authorization'] = read_conf('headers', 'Authorization')
        headers['yqw-Token'] = read_conf('headers', 'Authorization')



    return headers


# 读取配置项
def read_conf(section, option=None):
    """
    配置文件里有很多类型（envs/headers等），所以需要传递section来表达用的类型
    Args:
        section:读取类型（[envs],[headers]）
        option:读取类型里的对应字段(yqw_test,Authorization)
            - 如果传入 option，返回该 option 的值
            - 如果不传 option，返回整个 section 的字典
            Args:
                section: 配置文件的 section（如 'headers', 'app_user_header'）
                option: 可选，要读取的字段（如 'Authorization', 'Content-Type'）
            Returns:
                - 如果 option 提供，返回对应值（str 或 None）
                - 如果 option 未提供，返回整个 section 的字典（dict）
    Returns:返回对应字段的值

    """
    try:
        if option:
            # 读取单个 option
            return conf.get(section, option)
        else:
            # 读取整个 section
            if section in conf:
                return dict(conf[section])
            else:
                return {}
    except (configparser.NoSectionError, configparser.NoOptionError):
        return None if option else {}  # 单个返回 None，整个 section 返回 {}
